//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "TAfin.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)
TAfin::TAfin(float x11,float x21,float x31, float x41,float x12, float x22, float x32, float x42,
                float x13, float x23, float x33, float x43,float x14, float x24, float x34, float x44){

        matrizCoor[0]=x11; matrizCoor[1]=x21; matrizCoor[2]=x31; matrizCoor[3]=x41;
        matrizCoor[4]=x12; matrizCoor[5]=x22; matrizCoor[6]=x32; matrizCoor[7]=x42;
        matrizCoor[8]=x13; matrizCoor[9]=x23; matrizCoor[10]=x33; matrizCoor[11]=x43;
        matrizCoor[12]=x14; matrizCoor[13]=x24;matrizCoor[14]=x34; matrizCoor[15]=x44;
}

TAfin::TAfin(TAfin* m){
        for(int i=0;i<16;i++)
                matrizCoor[i]=m->getVector()[i];
}
void TAfin::setVector(float *m){
        for(int i=0;i<16;i++) matrizCoor[i]=m[i];
}

float * TAfin::getVector(){
        return matrizCoor;
}

void TAfin::cargarIdentidad(){
        matrizCoor[0]=1; matrizCoor[1]=0; matrizCoor[2]=0; matrizCoor[3]=0;
        matrizCoor[4]=0; matrizCoor[5]=1; matrizCoor[6]=0; matrizCoor[7]=0;
        matrizCoor[8]=0; matrizCoor[9]=0; matrizCoor[10]=1; matrizCoor[11]=0;
        matrizCoor[12]=0; matrizCoor[13]=0;matrizCoor[14]=0; matrizCoor[15]=1;
}


void TAfin::postMulMatriz(TAfin* m){
        float nuevaMatriz[16];
        for(int i=0;i<4;i++)
                for(int j=0;j<4;j++){
                        float v=0;
                        for(int k=0;k<4;k++){
                                int indice1=4*k+j;
                                int indice2=4*i+k;
                                float v1=matrizCoor[indice1];
                                float v2=m->getVector()[indice2];
                                v+=v1*v2;
                        }
                        int indice3=4*i+j;
                        nuevaMatriz[indice3]=v;
                }
        for(int i=0;i<16;i++) matrizCoor[i]=nuevaMatriz[i];
}

